package com.example.notification0223;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    /**
     * 除非发生以下情况之一，否则通知仍然可见：
     *
     * 用户关闭通知。
     * 用户点击通知，且您在创建通知时调用了 setAutoCancel()。
     * 您针对特定的通知 ID 调用了 cancel()。此方法还会删除当前通知。
     * 您调用了 cancelAll() 方法，该方法将移除之前发出的所有通知。
     * 如果您在创建通知时使用 setTimeoutAfter() 设置了超时，
     * 系统会在指定持续时间过后取消通知。如果需要，您可以在指定的超时持续时间过去之前取消通知。
     */
    private Button btnSend;
    private Button btnAbolish;
    private NotificationManager manager;

    private String id = "channel_001";
    private String name = "name";
    private Notification notification;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initview();//控件初始化
        createNotification();//创建通知
        clocksend();//点击发送通知
    }
    private void initview(){
        btnSend=findViewById(R.id.send_notification);
        btnAbolish=findViewById(R.id.abolish_notification);
    }
    private void createNotification(){
        /**
         * //第一步，创建NotificationManager管理类
         *         获取状态通知栏管理
         *         状态栏通知的管理类 NotificationManager，负责发通知、清除通知等操作。
         *         注意：NotificationManager是一个系统Service，
         *         所以必须通过 getSystemService (NOTIFICATION_SERVICE)方法来获取。
         *         8.0之前写法
         *         manager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
         */

        //8.0之后写法
        manager=getSystemService(NotificationManager.class);
        //第二步，
        if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){//判断安卓版本是否大于安卓8.0,如果版本大于8.0就创建通知
            //实例化通知栏构造器NotificationCompat.Builder：
            /**
             * 创建NotificationChannel需要传的三个参数
             * Creates a notification channel.
             *
             * @param id The id of the channel. Must be unique per package. The value may be truncated if
             *           it is too long.
             * @param name The user visible name of the channel. You can rename this channel when the system
             *             locale changes by listening for the {@link Intent#ACTION_LOCALE_CHANGED}
             *             broadcast. The recommended maximum length is 40 characters; the value may be
             *             truncated if it is too long.
             * @param importance 通知重要程度设置，NotificationManager类中
             *          * IMPORTANCE NONE关闭通知
             *          * IMPORTANCE_MIN开启通知，不会弹出，但没有提示音，状态栏中无显示
             *          * IMPORTANCE_LOW开启通知，不会弹出，不发出提示音，状态栏中显示
             *          * IMPORTANCE_DEFAULT开启通知，不会弹出，发出提示音，状态栏中显示
             *          * IMPORTANCE_HIGH开启通知，会弹出，发出提示音，状态栏中显示
             *                   IMPORTANCE_MAX最高级
             */
            NotificationChannel channel= new NotificationChannel(id,name,
                    NotificationManager.IMPORTANCE_HIGH);
            //设置锁屏可见
            //channel.setLockscreenVisibility();
            //设置通知呼吸灯颜色
            //channel.setLightColor();
            //设置通知铃声
            //channel.setSound();
            //设置振动模式
            //channel.setVibrationPattern();
            //是否允许显示气泡
            //channel.setAllowBubbles();
            manager.createNotificationChannel(channel);
        }
        /**
         * 1.setContentTitle(String string)设置标题
         * 2.setContentText(String string)设置文本内容
         * 3.setSmalllcon(int icon)设置小图标
         * 4.setLargelcon(Bitmap icon)设置通知的大图标
         * 5.setColor(int argb)设置小图标的颜色
         * 6.setContentintent((PendingIntent intent)设置点击通知后的跳转意图
         * 7.setAutoCancel(boolean boolean)设置点击通知后自动清除通知
         * 8.setWhen(long when)设置通知被创建的时间
         * 9.setStyle() 默认情况下，通知的文本内容会被截断以放在一行。如果您想要更长的通知，可以使用
         * 10.setPriority()设置优先级，才能支持 Android 7.1 和更低版本
         * 11.setFlags() 方法可帮助保留用户在通过通知打开应用后的预期导航体验。
         * 12.setRemoteInputHistory()将回复附加到通知底部。但如果要构建即时通讯应用，应创建消息式通知，并在会话中附加新消息。
         * 13.setProgress(max, progress, false) 第一个参数是“完成”值（如 100）；第二个参数是当前完成的进度，
         * 最后一个参数表明这是一个确定性进度条。
         * 14.setProgress(0, 0, false)移除进度条
         * 15.setSound()设置通知铃声
         * 16.setVibrate()设置震动方式
         * 17.setOnging()常驻通知栏
         */
        Intent intent=new Intent(this,DemoActivity.class);
        /**
         *
         */
        TaskStackBuilder builder=TaskStackBuilder.create(this);
        builder.addNextIntentWithParentStack(intent);
        PendingIntent pendingIntent=builder.getPendingIntent(0,PendingIntent.FLAG_CANCEL_CURRENT);
        notification=new NotificationCompat.Builder(this,id)
                .setContentTitle("堂堂")
                .setContentText("世界那么大，想去走走吗？")
                .setSmallIcon(R.drawable.ic_baseline_person_24)
                .setColor(Color.parseColor("#99ff66"))
                .setContentIntent(pendingIntent)
                //.setProgress(100,37,true)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.bg2))
                .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory
                        .decodeResource(getResources(),R.drawable.ddd)))
                .build();
    }

    private void clocksend(){
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通知的id，决定每次发的通知是否被替换/合并
                manager.notify(1,notification);
            }
        });
    }

}